lexer grammar javaLexer;

options {
  language = Java;
}
@header {package traductor;}

@members{
  ArrayList <RecognitionException> errores = new ArrayList<RecognitionException>();
  
  public boolean listaVacia (){
      if (errores.isEmpty()){
        return true;
      }else
        return false;
  }
  
  public ArrayList getListaErrores(){return errores;}
  
  
  @Override
  public void reportError (RecognitionException e){
    System.err.println (getErrorMessage(e, getTokenNames()));
    errores.add(e);
}

}

INT : 'int';
VOID : 'void';
RETORNAR : 'return';
fragment DIGITO: '0'..'9';
fragment LETRA : ('A'..'Z') | ('a'..'z') | '_';
fragment NUEVA_LINEA : '\r\n';
fragment TRUE :'true';
fragment  FALSE : 'false';
fragment COMILLAS : '\"';

 //TOKENS A FILTRAR 
  BLANCO: (' '|'\t'|NUEVA_LINEA) {skip();};
  COMENTARIO: '/*' (options {greedy=false;}:.)* '*/'{skip();};
  COMENTARIOlINEA : '//' (options { greedy=false; } : .)* NUEVA_LINEA{skip();};
  
// Tokens
BOOLEAN: (TRUE | FALSE);

ID : LETRA (LETRA | DIGITO)*;
NUMERO: DIGITO+;
CADENA : COMILLAS (options {greedy=false;}:.)* COMILLAS;
CARACTER : '\'' LETRA '\'';

MAS : '+';
MENOS : '-';
ASTERISCO : '*';
SLASH : '/';
IGUAL : '=';
ABRIRPARENTESIS : '(';
CERRARPARENTESIS : ')';
ABRIRCORCHETE : '[';
CERRARCORCHETE : ']';
ABRIRLLAVE: '{';
CERRARLLAVE: '}';
DOSPUNTOS : ':';
SEPARADOR : ';';
COMA : ',';

